﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace INI配置文件的读写
{
    internal class fileINI
    {
        public static string filePath;
        //声明INI函数的写操作，WritePrivateProfileString使用非托管函数kernel32
        [System.Runtime.InteropServices.DllImport("kernel32")]
        //传入4个参数，section-段落，key-关键字，val-值，filePath-文件路径
        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

        //声明INI函数的读取操作，GetPrivateProfileString使用非托管函数kernel32
        [System.Runtime.InteropServices.DllImport("kernel32")]
        //传入6个参数，section：INI文件中的节（Section）名称。
        //key：要获取其值的键（Key）名称。
        //def：如果指定的键（Key）不存在，返回的默认值。
        //retVal：用来存储读取结果的StringBuilder对象。
        //size：retVal 可以存储的最大字符数。
        //filePath：INI文件的路径。
        private static extern long GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);

        //定义写入INI文件的方法INIwrite
        public void INIWrite(string section, string key, string value, string path)//传入4个参数
        {
            // section=配置节点名称，key=键名，value=返回键值，path=路径
            WritePrivateProfileString(section, key, value, path);
        }

        //定义读取INI文件的方法INIRead
        /// <summary>
        /// section：表示要读取的节（Section）名称。key：表示要获取值的键（Key）名称。path：表示INI文件的路径。
        /// System.Text.StringBuilder temp = new System.Text.StringBuilder(255);：
        /// 创建了一个StringBuilder对象，用于存储从INI文件中读取的值，初始容量为255个字符。
        /// GetPrivateProfileString调用了非托管函数来从INI文件中读取指定节和键对应的值，并将结果存储在temp中。
        /// return temp.ToString();：将StringBuilder对象中的值转换为字符串，并作为方法的返回值。
        /// </summary>
        /// <param name="section"></param>
        /// <param name="key"></param>
        /// <param name="path"></param>
        /// <returns></returns>
        public string INIRead(string section, string key, string path)
        {
            // 每次从ini中读取多少字节
            System.Text.StringBuilder temp = new System.Text.StringBuilder(255);
            // section=配置节点名称，key=键名，temp=上面，path=路径
            GetPrivateProfileString(section, key, "", temp, 255, path);
            return temp.ToString();
        }
        //删除一个INI文件

        public void INIDelete(string FilePath)
        {
            DialogResult dialogResult = MessageBox.Show("是否确定删除 INI 配置文件？", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);

            if (dialogResult == DialogResult.OK)
            {
                File.Delete(FilePath);
                MessageBox.Show("成功删除", "删除成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }
}
